Question: Graphs of several functions are shown below.  Which functions have inverses?

[asy]
unitsize(0.5 cm);

picture[] graf;
int i, n;

real funce(real x) {
  return(x^3/40 + x^2/20 - x/2 + 2);
}

for (n = 1; n <= 5; ++n) {
  graf[n] = new picture;
  for (i = -5; i <= 5; ++i) {
    draw(graf[n],(i,-5)--(i,5),gray(0.7));
    draw(graf[n],(-5,i)--(5,i),gray(0.7));
  }
  draw(graf[n],(-5,0)--(5,0),Arrows(6));
  draw(graf[n],(0,-5)--(0,5),Arrows(6));

  label(graf[n],"$x$", (5,0), E);
  label(graf[n],"$y$", (0,5), N);
}

draw(graf[1],(-5,1)--(-2,-2)--(0,3)--(4,3),red);
draw(graf[2],(-3,-3)--(0,-2),red);
draw(graf[2],(0,2)--(2,4),red);
filldraw(graf[2],Circle((-3,-3),0.15),red,red);
filldraw(graf[2],Circle((0,-2),0.15),white,red);
filldraw(graf[2],Circle((0,2),0.15),red,red);
filldraw(graf[2],Circle((2,4),0.15),red,red);
draw(graf[3],(-3,5)--(5,-3),red);
draw(graf[4],arc((0,0),4,0,180),red);
draw(graf[5],graph(funce,-5,5),red);

label(graf[1], "A", (0,-6));
label(graf[2], "B", (0,-6));
label(graf[3], "C", (0,-6));
label(graf[4], "D", (0,-6));
label(graf[5], "E", (0,-6));

add(graf[1]);
add(shift((12,0))*(graf[2]));
add(shift((24,0))*(graf[3]));
add(shift((6,-12))*(graf[4]));
add(shift((18,-12))*(graf[5]));
[/asy]

Enter the letters of the graphs of the functions that have inverses, separated by commas.
Given the graph of a function, the function has an inverse only when every horizontal line intersects the graph at most once.  Thus, the only graphs where the functions have inverses are $\boxed{\text{B,C}}.$